//================v1要点总结===============
/**
 * 1. 尝试递归
 * 2. 利用递归，复现每一个可能的组合，并排除掉不符合条件的
 */

/**
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */

var combine = function (n, k) {
    let rslt = []
    function treeWalk(offset, curArr) {

        // 偏移到最后一位，得到结果
        if (offset >= k) {
            rslt.push([...curArr])
            return
        }
        for (let i = offset; i < n; i++) {

            // 当前位的值应小于 n - k + offset
            if (i <= n - k + offset) {

                // 当为第至少第二位时，当前值必须比前一个大才行
                if (offset === 0 || (offset > 0 && curArr[offset - 1] < i + 1)) {
                    curArr[offset] = i + 1
                    treeWalk(offset + 1, curArr)
                }
            }
        }
    }
    let curArr = new Array(k)
    treeWalk(0, curArr)
    return rslt
}

console.log(combine(1, 1))